Google



MENU
--[News>
--[ >
--[Jak zrobić>
--[ >

--[Linki>
--[>




LICZNIK



LINKI












Regiony, kamery i wyzwalacze cz.1
Napisał:TTBoS 14:15 1-03-06
Regiony, kamery i wyzwalacze cz.1


Teraz zabierzemy się za to, co sprawi, że nasze mapy "ożyją" - czyli za wyzwalacze. Jednak niemalże żaden wyzwalacz nie zadziała bez wsparcia regionów, a żaden cinematic nie zadziała bez kamer(dziwne, nie?). Zajmiemy się też tworzeniem prostych i tych troche bardziej skomplokowanych triggersów. Mianowicie zabierzemy się za questy, podstawy cinematiców a także rzecz najważniejszą - czyli warunkowanie. Po opanowaniu wszystkiego ujętego w tym texcie stworzysz już prawdziwą, rozbudowaną RPGówkę(z questami, cinematicami i wogóle z 3mającą się qpy FABUŁĄ! - btw. zabierając się za wyzwalacze, najlepiej jeśli masz już jakąś mniej więcej ukształtowaną mapkę, ale jeśli nie masz albo po prostu nie chce ci się robić to spox, można trenowac "na sucho" [tworzysz mapke tiny, stawiasz start locations dla 2 playerów i jazda]) Jeśli chodzi o same regiony, to sprawa jest baaardzo prosta. Po prostu korzystając z "region palette" umieszczamy na mapie regiony - czyli wyznaczone obszary, a później nadajemy im odpowiednią nazwę. I t utaj ważne jest żeby nazwa regionu od razu mówiła ci o które miejsce chodzi, gdyż przy dużych mapach zachodzi potrzeba stworzenia duzej ilosci regionów, a sprawdzanie za kazdym razem, który region jest nam aktualnie potrzebny nie wydaje się być tym, na czym chcielibyśmy spędzac czas pracując w edytorze. Zastosowanie regionów jest wielorakie. Używamy ich do uruchamiania triggersów, jako punkty odniesienia dla niektórych akcji np. move instantly, także do umieszczenia efektów pogodowych... i napewno jest jeszcze dużo zastosowań tychże, zle nie chce mi się zastanawiać :) Nieco inaczej sytuacja wygląda z kamerami. Używamy ich tylko do kinematików :) Tworzymy je korzystając z "camera palette". Wybieramy widok, jaki ma pokazywać dana kamera i wciskamy "Create Camera". Wybór odpowiedniego widoku to połowa sukcesu. Najłatwiej możemy tego dokonać, trzymając wciśnięty prawy CTRL i za pomocą myszki ustawić właściwy widok(możemy też skorzystać z kursorów). Jeżeli po wciśnięciu CTRL nie możesz ustawiać dowolnego widoku, w zakładce "view" wyłącz opcję "lock to game camera". Podobnie jak w przypadku regionów, tak i przy kamerach, bardzo istotna jest nazwa. Musi ona być kluczowa i łatwo "przypominająca" o która kamerę chodzi, zwłaszcza gdy jest ich np. ok 100 :) np. Kamera ukazująca wejście do miasta od północy -> city_entry_from_north. proste? i zarazem skuteczne! To by było na tyle! Czas przejśc do sedna sprawy. Odpalmy więc trigger editor. Widoczny po lewej folder o nazwie "initialization" jest przeznaczony dla tych triggersów, które mają zostać uruchomione przy wczytywaniu mapy. Pierwszym bardzo ważnym wyzwalaczem jest Meele initialization. Tu zawieramy ustawienia graczy, zasobów, ustawiamy wszelkie współczynniki. Wiecie już(mam nadzieję), do czego służą wyzwalacze zaczynające się od Meele game. Tych używa się TYLKO raz w MEELE INITIALIZATION, z tym, że gdy tworzymy mapę RPG, nie wszystkie są nam potrzebne, a czasami nawet żaden. W tym triggersie możemy ustawić ustawienia czasu [Game - Set time of day to xxx] i [Game - set ti me of day speed] w rpg najlepiej zmniejszyć szybkość. Tu ustawimy też wygląd nieba(widoczne tylko w cinematicach) poprzez [Environment - Set Sky to xxx]. Ustawimy też ilosc zasobów i kilka innych właściwości dla poszczególnych graczy stosując [Player - set property]. Możemy też wyłączyć jakieś technologie. poprzez [Player - Set Training/Construction Availability of Unit]. Sprawimy też, aby niektóre elementy na mapie stały się niezniszczalne - dla doodadsów [Destructible Doodad - Make invulnerable/vulnerable], dla jednostek [Unit - make Invulnerable/Vulnerable]. Stosuje się je (jak wszystkie akcje) bardzo prosto. Po wybraniu typu akcji zobaczysz napis: Make (Triggering unit) Invulnerable. (Triggering Unit) oraz Invulnerable są podkreślone, co oznacza, że można tę właściwość zmienić. Klikamy więc na (Triggering Unit). I tu mamy do wyboru: preset (bardzo rzadko używane), Variable (czyli zmienna, jednostkom żadko nadaje się zmienne, zazwyczaj korzystamy po prostu z przycisku "Select a Unit" i wybieramy jednostkę, o którą nam chodzi, jednakże w wypadku RPGówek gdzie głównym bohaterem jest 1 bohater (hehe) warto nadać mu zmienną. O tym jak to zrobić, za chwilę.), oraz Function. (to jest bardzo przydatne, nie będę jednak opisywał każdej z funkcji, jak potrenujecie, sami dojdziecie co dają poszczególne z nich. Na uwagę zasługuje "Event Response - Triggering Unit" ta funkcja oznacza jednostkę, która uruchomi dany wyzwalacz.). W Meele initialization można umieścić jeszcze dużo innych rzeczy, ale to te najwazniejsze. W folderze "Initialization" dla każdego questa stworzymy po nowym triggersie, który go zainicjuje. Ten sposób wydaje się być najlepszy - stworzenie wszystkich questów jako "undiscovered" (nieodkryte) zaraz przy wczytywaniu mapy, a odkrywać je wtedy, kiedy potrzeba. Stwórzmy więc w katalogu initialization wyzwalacz o nazwie [nazwa_questa_initialization]. Wybierz u góry "New Event" i dodaj wydarzenie "map initialization". Conditions zostaw puste, ponieważ trigger będzie uruchamiany bez żadnych warunków - czyli zaw sze i wszędzie. Możesz wprowadzić ewentualnie ograniczenie, które sprawi, że quest będzie widoczny TYLKO dla gracza sterowanego przez usera. W tym celu wybierz "new condition" i wybierz [Player Controller Comparision] ustaw odpowiedniego playera(tego, którym będzie grał żywy gracz) i ok. Zwróć uwagę na "equal to" - oznacza to mniej więcej "równe"; w tej opcji masz jeszcze do wyboru "not equal to" czyli "różne od". A więc całość wygląda tak: controller gracza x jest Userem. A teraz czas stworzyć questa. Wybierz "new action" i znajdź [Quest - Create Quest]. Pjawi się długi, kolorowy (niebieski-wartość, która możesz zmieniać, czerwony-oznacza wartość, którą musisz ustalić) napis: "Create a Required(ustal, czy quest ma byc obowiazkowy czy opcjonalny i wybierz "Requiered,undiscovered" lub "Optional,undiscovered") quest titled TITLE(tu nadaj tytuł swojemu questowi np. Nawiedzony cmentarz :))))))))) with the description DESCRIPTION (tu nadaj opis, który będzie widoczny po odkryciu questa w okienku zadań), using icon path BLABLABLA(tu jest ścieżka ikony, która jest widoczna obok questa w okienku zadań. Nie będe podawał ściezek wszystkich buttonów. Zostaw to standardowo. Jeśli jednak ktoś jest zainteresowany kompletnym spisem ikonek, dajcie znać!) po usawieniu wszystkich właściwości kliknij OK. Quest już jest. ...:::WAŻNE!!!!:::... Ale teraz należy nadać mu zmienną. Jest to bardzo ważne, gdyż gdy występuje kilka questów(i nie tylko questów, zmienne nadaje się niemal wszystkiemu), musimy się jakoś do nich odwoływać. Jeżeli dobrze poszukasz, to zobaczysz, że gdy chcemy się odwołać do jakiegoś questa, do wyboru masz tylko jedną funkcję "Last Created Quest". Dlatego musimy korzystać z zmiennych! Z pomocą przychodzi nam akcja [Set Variable]. Modyfikujemy czerwone "Variable". Otwieramy edytor zmiennych i wybieramy "New Variable". Jak zwykle nazwa zmiennej musi być kluczowa. W przypadku questów np. Nawiedzony_cmentarz :) Wybieramy typ zmiennej - w tym wypadku "Quest". Zamykamy edytor zmiennych. Z menu rozwijanego wybieramy stworz oną zmienną. Klikamy OK. A z "Value" wybieramy funkcję "Last Created Quest". W ten sposób teraz, chcąc odwołać się do odpowiedniego questa, korzystamy z wyznaczonej zmiennej. Zapewne zauważyliście, że normalnie quest nie składa się tylko z nazwy i opisu. Brakuje Requierments'ów czyli wymaganych kolejnych kroków w danym zadaniu. Skorzystajmy więc z akcji [Quest - Create a Quest Requirement]. Widzimy "Create a Quest Reqirement for (i tu możemy odwołać do zmiennej dotyczącej questa, do którego chcemy dodać np. wybieramy z variable Nawiedzony_cmentarz), with the description (i tu treść requirements'a)" Teraz musimy oczywiście przyporządkowac zmienną. I tak za każdym razem gdy tworzymy np. requirements'y dajemy im odpowiednią zmienną (już powinniście umieć to zrobić!!!). Np. Znajdź nawiedzony cmentarz etc... W ten sposób tworzymy kompletne questy. OK. Teraz czas je uaktywnić w grze! A to wiąże się z cinematicami. Mamy więc chłopka, który da nam dane zadanie. Tworzymy więc region, w centrum którego on stoi. Nazywam y go "nazwa_questa_quest_give" albo jakos inaczej, ale kluczowo. Tworzymy też ze 2 kamery, która ładnie panoramicznie ukazuja chłopka z różnych ujęć. )Przy okazji, w initialization danego questa mozna tez umiescic akcję [Special Effect - Create Special Effect on Unit] dzieki której dodamy wykrzyknik nad głową wybranego chłopka Oczywiście ustawiamy mu zmienną!!! Tworzymy więc nowy folder najlepiej o nazwie questa i tworzymy nowego triggersa najlepiej o nazwie "nazwa_questa_quest_give". Jako Event ustaw [Unit - unit enters region(odpowiedni region)]. W warunkach ustaw aby trigger mógł być uruchamiany przez konkretnego gracza(czyli tego którym ma sie rozgrywać misję) korzystając z [Player Comparision] Ustaw (Owner of (Triggering Unit)) Equal to (odpowiedni player) i OK. Teraz czas na akcje czyli na cinematica, który odkryje też odpowiedniego questa. Pierwszą akcją powinno być [Cinematic - Turn on letterbox mode (hide interface) for (All players): fade out over (njlepiej 0) seconds] - schowa to interfejs; nastepn a akcja to [Cinematic - Turn cinematic mode On for (najlepsza opcja to "(All allies of (Owner of (Triggering unit)))"). Włączy to tryb filmu (nie będzie fog of war, będzie widoczne niebo). Następnie użyj [Special Effect - Destroy Special Effect] aby zniszczyc wykrzyknik nad głową "rozmówcy". Następna akcja to [Cinematic - disable user control (for (all players)). Jak nazwa wskazuje zabierze to kontrolę nad jednostkami. Możesz też użyć [Unit - Pause/Unpause all units] żeby zastopować wszystkie jednostki, co by nie latały po ekranie jak szalone :D. Żeby było ładnie i przejżyście użyj [Wait] ze 2 sekundy. Teraz czas na kamery [Camera - Apply Camera Object (timed)]. Zrób to tak: "Apply (pierwsza kamera- oczywiście odpowiednia nazwa) for (Owner of (Triggering Unit)) over (czas - im większy, tym dłużej obraz będzie przechodził ze standardowej kamery do widoku przedstawionego w danej kamerze) seconds". Następne [Cinematic - Transmission from unit]. A wyglądać to będzie tak: "Send Transmission to (All Allies of (Owne r of (Triggering Unit))) from (i tu wybieram chłopka, który ma gadać) named (jego imie/nazwa albo cos w tym stylu - to jest wyswietlane nad textem, który będzie wyświetlony): Play (mozna, ale narazie damy sobie spokój, wstawić jakiś dźwiek towarzyszący wypowiedzi) and display (text wypowiedzi). Modify Duration: (np. Set to) (czas trwania - musi byc odpowiedni do dlugosci wypowiedzi) seconds and (Wait)." Wiadomo aby to ładnie wyglądało to lepiej stworzyć kilka wypowiedzi, a krótszych(później koniecznie przetestuj, czy jesteś w stanie je przeczytać, czy jest za mało czasu!!!). W między czasie możesz użyć drugiego [Camera - Apply Camera Object (Timed)] żeby zmusić kamerę do ruchu poprzez ustawienie widoku na widok z drugiej kamery :). Jak już się skończą wszystkie transmission to wtedy [Camera - Reset Game Camera] -> "Reset camera for (Owner of (triggering unit)) to standard game-view over (czas) seconds". Teraz czas na akcje związane z zadaniem. Pierwsze [Quest - Flash the quest button Dialog]. nastepne [Quest - Mark Quest As Discovered] - stosując odpowiednią zmienną uaktywniamy dane zadanie. Kolejne to [Quest - Quest Message] -> Display to (player group - gracz rozgrywający) the (rodzaj wiadomosci, rózne rodzaje dają tylko różne dźwięki w momencie pojawiania się message'a) message: (treść ). Teraz wyłączamy włączone wcześniej opcje czyli kolejno [Unit - Unpause all units], [Cinematic - Enable User Control for all players], [Cinematic - turn cinematic mode off] i [Cinematic - Turn off letterbox mode] (nie zapominajcie właściwie ustawić wszystkich współczynników - powinniście już wiedzieć co znaczy - właściwie :D). Na końcu umieszczamy kluczowe akcje np otworzyc jakas brame albo cos [Destructible Doodad - Open/Close/Destroy Gate]. I na końcu umieszczamy [Trigger - turn off (this trigger)]. Zapobiegnie to wielokrotnemu uruchamianiu danego wyzwalacza. A teraz przetestuj ten trigger. Zaznacz kilka jednostek i każ im wejść na obszar regionu. Co zauważyłeś? Przynajmniej powinieneś zauważyć, że gdy każda kolejna jednostk a wchodzi na obszar regionu trigger odpala sie od nowa. I tu z pomocą przychodzi nam warunkowanie. Jako pierwszą akcje w danym triggersie wstaw [set variable], otwórz edytor zmiennych i stwórz zmienną o nazwie "nazwa_questa_quest_gained" typu boolean (przyjmuje wartosc TRUE/FALSE) o wartosci poczatkowej FALSE; i ustaw w akcji set nazwa_questa_quest_gained = true. A w conditions dodaj [Boolean Comparision] -> nazwa_questa_quest_gained Equal to false. I w ten oto prosty sposób trigger jest gotowy. Dalsza czesc jeśli chodzi o questy prezentuje się nastepująco: przy tworzeniu nastepnego triggersa (dla tego samego questa) robimy w events standardowo "entering region", w conditions dodajemy nazwa_questa_quest_gained equal to true i akcje - takie jakie potrzebujemy - zauwazyliscie zapewne akcje [Quest - Mark Quest Requirements As Completed] uzywamy ich by "odchaczac" kolejne requirements'y. Po odchaczeniu powinnismy tesh wstawic [Quest - quest message] informujacy o odchaczeniu requirements'a (btw: dla kazdego stwór z zmienną typu boolean; jeśli requirement mówi "znajdź cmentarz" stwórz zmienną "graveyard_founded" oczywiscie o wartosci poczatkowej FALSE, i w triggersie który zostanie uruchomiony przy wejściu na cmentarz ustawiasz oczywiscie [set variable] i ustawiasz dana zmienna na TRUE (wiem, że trochę to skomplikowane, ale na tym mniej więcej polega istota warunkowania - i tu jak wszędzie, trening czyni mistrza :D). Dla kazdego questa stwórz trigger "nazwa_questa_completed". W Events ustaw [Time - Periodic Event] np. co 5 sekund. W conditions ustawiasz tyle [boolean comparision] ile requirementsów stworzyłeś i oczywiście wszystkie equal to TRUE. A w akcjach [Quest - Mark Quest As Completed] dla danego questa, odpowiedni quest message i KONIECZNIE [Trigger - Turn of] - Turn off (this trigger). W podobny sposób ustawiasz warunki zwycięstwa - wtedy dla każdego questa tworzysz zmienną typu boolean która oznacza, czy quest został wypełniony czy nie. W akcjach ustawiasz [Game - Victory] - "Victory - (odpowiedni gracz - czyl i user :)) Show dialogs, show scores" I w ten oto prosty :)))) sposób mozesz tworzyć mapki z wyzwalaczami! Wiem że to co tu napisałem to zaledwie skrawek wiedzy o triggersach, ale gdyby chcieć napisać wszystko na ich temat, byłoby tego setki stron.... niemniej jednak uwazam iż z pomocą tego tutoriala powinniście zajarzyć o co w tych wyzwalaczach chodzi. Apel do was: experymentujcie, kombinujcie i testujcie!!! a na pewno odkryjecie mnustfo przydatnych funkcji, które niosa ze sobą wyzwalacze. Jeżeli tylko coś jest dla was niezrozumiałe, albo nie wiecie jak coś zrobić. Przyjemnej pracy z edytorem!!!! Zapraszam do lektury części następnej!




nastepna strona >>

Strona: 1/1







LINKI
STRONE NAJLEPIEJ SIE OGLĄDA W ROZDZIELCZOŚCI 1024x768 I W PRZEGLĄDARCE MOZILLA FIREFOX KTÓRĄ MOŻNA POBRAĆ Z BOWYSZEGO LINKU.

©2006-2007 TTBoS. All rights reserved.